from PIL import Image
import os

def gif_to_jpeg_frames(gif_path, output_folder, quality=100):
    """
    将 GIF 文件逐帧转换为 JPEG 图片并保存到指定目录。

    :param gif_path: GIF 文件路径
    :param output_folder: 输出 JPEG 图片帧的目录
    :param quality: JPEG 压缩质量 (1-100)
    """
    if not os.path.exists(output_folder):
        os.makedirs(output_folder)

    with Image.open(gif_path) as img:
        try:
            frame_index = 0
            while True:
                # 选择当前帧
                img.seek(frame_index)

                # 转换为 RGB 模式（JPEG 不支持透明通道）
                rgb_img = img.convert("RGB")

                # 构造输出路径
                output_path = os.path.join(output_folder, f"frame_{frame_index:04d}.jpg")

                # 保存为 JPEG
                rgb_img.save(output_path, "JPEG", quality=quality)

                print(f"保存帧: {output_path}")

                frame_index += 1
        except EOFError:
            # GIF 帧读取完毕
            print("所有帧已提取完成。")
        except Exception as e:
            print(f"发生错误: {e}")

# 示例用法
gif_path = "./fly.gif"            # 替换为你的 GIF 文件路径
output_folder = "./output_frames"     # 输出 JPEG 图片帧的目录

gif_to_jpeg_frames(gif_path, output_folder, quality=90)
